Unreal Engine5で弊社公式キャラの3Dモデル(VRM)を操作できるようにしてみた
最近、Unreal Engineを初めて触ってみました。
デフォルトで用意されている3Dモデルのテンプレートをあれこれ弄るだけでも結構楽しいのですが、せっかくならもっと身近なキャラクターも動かしてみたいと思ったところ、Unityで弊社の公式キャラクターであるめそ子の3Dモデルを動かしている弊社の過去記事を見つけました。
Unityで動かせるならUnreal Engineでもたぶん動かせるだろう。そんな感じで安易に手を出してみたところ、予想以上に動かすまでに手間がかかりました。
ともあれ、最終的には何とか動かすことができたため、今回はその過程を記事にしてみました。
実行環境
- Unreal Engine 5.0.3
- VRM4U 5_0_20221103
- Blender 3.3.1
- VRM Add-on for Blender 2.10.2
3Dモデルの用意
公式サイトからダウンロード
めそ子の3Dモデルについては、以下のサイトにて配布されています。使用条件等についても記載してあります。
彩木あかりと花咲ひさきの二人のキャラクターが用意されていますが、Unityで動かす記事では花咲ひさきを使っていたため、この記事では彩木あかりを使用します。ただ、記事内では分かりやすい記述にするためめそ子と呼称します。
ダウンロードしためそ子のzipファイルを解凍すると、中にはVRMとFBX形式の3Dモデルファイルが入っています。FBXは広く一般に使われている3Dファイルの形式で、VRMはVR等でのアバターを扱うことを目的に作られた新しい形式です。
VRMはまだ一般的なファイル形式でないためUEで扱うにはプラグインが必要になりますが、機能的には優れているため今回の記事はVRMを使っていきます。
VRMファイルの変換
ダウンロードしためそ子のVRMファイルをそのままUE5にインポートすると、一部のテクスチャが表示されなかったり、一部の作業中にエディタが強制終了するという現象が発生しました。
はっきりとした原因は不明ですが、恐らくはめそ子のVRMファイルが2019年と少し前に作られたものであることが原因と思われます。VRM規格については、2022年9月にVRM-1.0という新しいバージョンがリリースされており、UE5のVRMプラグインも最新バージョンを前提に作られています。そのため、古いVRM形式だと上記のような不具合が発生しやすくなっていると推測しました。
この問題を解決するため、Blenderを使って以下の手順でVRMを再出力してみたところ、UEで問題なく使用できるようになりました。恐らく、古いVRMを新しい形式に変換できたのだと思われます。
- BlenderにVRM規格に対応するVRM Add-on for Blenderアドオンを追加
- 導入手順については公式サイト参照
- Blenderの作業画面に何もない状態にする(Cubeが初期配置されてたら削除)
- File -> Import -> VRMをクリックして、対象のVRMファイルをインポート
- そのまま何も操作せず、 File -> Export -> VRM で新しいVRMファイルをエクスポート
UE5での操作
無償のマップアセットを元にプロジェクト作成
UEのテンプレートとして用意されているマップでも良いのですが、せっかくならもっと凝ったものを使ってみたいと思い、マップのアセットとして今回はこちらを使用させていただきました。
City Park Environment Collection LITE:環境 - UE マーケットプレイス
アセットをダウンロードした状態で、Epic Games LauncherでUnreal Engine -> ライブラリと開き、このアセットの「プロジェクトを作成する」ボタンをクリックすると、このアセットをマップとして組み込んだ新規UE5プロジェクトが開きます。
三人称ゲーム用のテンプレートをインポート
マップアセットからプロジェクトを作成した状態では、マップ以外何も存在しない状態です。
とりあえず、今回の目的であるめそ子を動かせるようにしたいですが、いきなり3Dモデルをインポートしても動かせるようにはなりません。プレイヤーとして操作できるようにするためには、ユーザの操作に応えてモデルが移動したり、アニメーションできるようにする必要があります。
しかし、0からそれらを作成するには多大な時間が必要となってしまいます。
幸い、UEにはゲームでよく使う3Dモデルやそれを動かすためのBlue Printがあらかじめテンプレートとして用意されています。
ひとまず、それを使ってこのマップ上でプレイヤーキャラクタが動かせるようにしてみます。
エディタ下部のContent Browser内で右クリック-> Add Feature or Content Packを選択すると、プロジェクトに追加するテンプレートを選択する画面が表示されます。その画面上でThird Personを選択してAddをクリックすると、三人称視点ゲーム用のプレイヤーモデルやBlue Print等のテンプレートがContent Browserに追加されます。
マップの中を操作できるように設定
ゲーム開始とともにプレイヤーキャラクタが表示され、それを操作できるようにしていきます。
ゲーム開始時のプレイヤーキャラクタの位置を指定するためのActor(UEにおけるオブジェクトのこと)として、Player Startというものがあるため、それをマップ上に配置します。配置したPlayer Start ActorがBAD Sizeと表示されている場合は、マップとActorが衝突しているため、位置を調整します。
次に、どの3Dモデルをプレイヤーとして配置するか設定します。上部メニューからWindow -> World Settingsと選択し、表示されたタブの中でGame Mode内のGame Mode Override項目にBP_ThirdPersonGameModeを設定します。すると、その下部にあるDefault Pawn Class等の項目にも値が自動的にセットされます。
この状態でゲームを開始すると、Player Start Actorを配置した場所にテンプレートのプレイヤーモデルが表示され、三人称視点でそれを操作できます。WASDキーを押すと移動し、スペースキーを押すとジャンプします。
プロジェクトにVRMを読み込むためのプラグイン追加
テンプレートのプレイヤーキャラクタを動かせるようになったところで、次はこのプレイヤーモデルをめそ子に置き換えていきます。
まず、UEの中にVRMモデルをインポートします。ただ、前述の通りUEはVRM形式に標準対応していません。そのため、VRM4Uというプラグインを導入する必要があります。
プラグインのデータは、上記の公式サイト経由で入手できます。
プラグインを入手したら、上部メニューのEdit -> Plugins をクリックしPluginsウィンドウを開きます。 Pluginsウィンドウにて、検索欄にvrmと入力すると「VRM4U」が表示されます。(表示されない場合はエディタを再起動します)
VRM4Uにチェックを付けてRestart Nowをクリックし、エディタを再起動するとプラグインが有効化されます。
VRMファイルインポート
VRMモデルをインポートすると、モデルデータやテクスチャ等のファイルがたくさん生成されます。Content Browserの適当な場所にインポートすると整理が大変になるため、めそ子モデル関係のファイルを入れるためのディレクトリMethokoをContent -> Characters内に新規作成します。
Methokoディレクトリを開き、その中にエクスプローラ等からVRMファイルをドラッグアンドドロップします。
Import Optionsが表示されますが、特に何も触らずにImportをクリックして問題ありません。ちなみに、VRMファイルに組み込まれたライセンス情報がこの画面で確認できるようになっています。
Methokoディレクトリ内に3Dモデル関係のファイルが展開されたら、インポートは完了です。
尚、VRM4Uには様々な機能があり、インポートした3Dモデルの見た目などを色々と調整できるのですが、今回はとりあえず動かすことが目的のため、特に調整作業は行いません。
IK Retargeterによるリターゲット設定
読み込んだめそ子のモデルに対し、リターゲット設定を行っていきます。
リターゲットとは、骨格が似ている異なる3Dモデル同士でアニメーションを流用することを言います。今回は、最初に作成したUEのテンプレートのモデルが持っているアニメーションを、めそ子のモデルに流用していきます。
Content Browser内で、Content->Characters->Mannequins->RigsにあるRTG_Mannequinというファイルを開きます。このファイルは、テンプレートモデルからリターゲットを行うための設定ファイルです。
新しいウィンドウが開いたら、Detailsタブ内のTarget IKRig Assetの項目に先程インポートしためそ子のファイルのうち、IK_{Importファイル名}_Mannequinというファイルをセットします。すると、プレビュー画面に2つ並んでいたモデルの右側が、めそ子のモデルに切り替わります。
この状態で、リターゲットされためそ子がどのようにアニメーションするかプレビューしてみます。
明らかにポーズがおかしいですね。面白くなくもない挙動ではありますが、普通に操作をしたいので修正することにします。
2つのモデルのアニメーションを見比べておかしいのは手の位置です。先程のリターゲット設定画面のスクリーンショットを見返してみると、待機状態の時点で手の位置が違っています。いくら同じような人体モデルでも、ポーズが大きく異なれば正確にアニメーションをリターゲットすることはできません。
UEテンプレートモデルは両手を下げており、このようなポーズをAポーズと言います。対して、めそ子モデルのように両手を水平に広げたポーズはTポーズと言います。
VRM4Uには、このような場合にモデルのポーズをAポーズやTポーズに自動的に調整する機能もあるのですが、今回のケースでは上手く動かなかったため、手動でポーズを調整していきます。
リターゲット設定画面では、画面上部のEdit Poseボタンを押し、リターゲット対象のモデルに組み込まれているリグを動かすことで、ポーズを調整できます。
ポーズを調整して、改めてアニメーションをプレビューしてみます。
だいぶ不自然さは減らすことができました。
リターゲットの設定ができたため、画面左上のSaveをクリックして設定を終了します。
リターゲットしたアニメーションの出力
リターゲットの設定を元に、新しくめそ子のアニメーションをファイルに出力していきます。
Content->Characters->Mannequins->Animationsの中にあるABP_Quiinを右クリックします。ちなみに、このファイルはアニメーションの制御に関するロジックが書かれたBlue Printファイルです。
右クリックメニューの中から、Retarget Animation Assets->Duplicate and Retarget Animation Assetsをクリックします。
リターゲット設定と選択したBlue Printファイルのロジックを元に、新しくアニメーションのBlue Printファイルを作成するための画面が開きます。
画面内の各項目を以下のように設定します。
- IK Retargeterに先程のRTG_Mannequinファイル
- Source Skeltal MeshにSKM_Quinn_simple
- Target Skeltal MeshにSK_{Importファイル名}
- Changeボタンをクリックして、アニメーション関係のファイルの出力先としてめそ子のモデル格納用ディレクトリ指定
この状態でRetargetをクリックすると、めそ子のアニメーションBlue Printファイルが出力されます。
プレイヤーのモデルとアニメーションの設定変更
めそ子のモデルと生成したアニメーションをプレイヤーのActorにセットします。
Content→ThirdPerson→Blueprints内のBP_ThirdPersonCharacterを開きます。
画面に表示されているテンプレート3Dモデルをクリックし、DetailsタブのMesh→Skeltal Meshにめそ子のモデル、Animation→Anim Classに先ほど生成したアニメーションBlue Printをセットし、画面左上のCompileをクリックします。
完成
ここまでの作業を終えた上でゲームを起動すると、プレイヤーキャラクターとしてめそ子を操作できるようになります。
まとめ
VRMモデルをUnreal Engine5上で動かすまでの一連の手順を記述しました。
よく見るとところどころ不自然な箇所はまだ残っていますが、とりあえずそれっぽく動かすことができて良かったです。クオリティをアップするには更なるアニメーションの微調整や衣服周りの処理も必要となってきそうですが、それについてもまた書いていければと思います。